//go:build !noasm && arm64
// AUTO-GENERATED BY GOAT -- DO NOT EDIT

TEXT ·hamming(SB), $0-32
	MOVD a+0(FP), R0
	MOVD b+8(FP), R1
	MOVD res+16(FP), R2
	MOVD len+24(FP), R3
	WORD $0xa9bf7bfd    // stp	x29, x30, [sp,
	WORD $0xf9400069    // ldr	x9, [x3]
	WORD $0x910003fd    // mov	x29, sp
	WORD $0x6b0903e8    // negs	w8, w9
	WORD $0x1200052a    // and	w10, w9,
	WORD $0x12000508    // and	w8, w8,
	WORD $0x5a884548    // csneg	w8, w10, w8, mi
	WORD $0x4b08012a    // sub	w10, w9, w8
	WORD $0x7100415f    // cmp	w10,
	WORD $0x540000ea    // b.ge	.LBB0_2
	WORD $0x6f00e401    // movi	v1.2d,
	WORD $0x2a1f03eb    // mov	w11, wzr
	WORD $0x6f00e402    // movi	v2.2d,
	WORD $0x6f00e403    // movi	v3.2d,
	WORD $0x6f00e400    // movi	v0.2d,
	WORD $0x14000016    // b	.LBB0_4

LBB0_2:
	WORD $0x6f00e400 // movi	v0.2d,
	WORD $0xaa1f03eb // mov	x11, xzr
	WORD $0x6f00e403 // movi	v3.2d,
	WORD $0xaa0003ec // mov	x12, x0
	WORD $0x6f00e402 // movi	v2.2d,
	WORD $0xaa0103ed // mov	x13, x1
	WORD $0x6f00e401 // movi	v1.2d,

LBB0_3:
	WORD $0x4cdf2984 // ld1	{ v4.4s, v5.4s, v6.4s, v7.4s }, [x12],
	WORD $0x9100816e // add	x14, x11,
	WORD $0x9100416b // add	x11, x11,
	WORD $0xeb0a01df // cmp	x14, x10
	WORD $0x4cdf29b0 // ld1	{ v16.4s, v17.4s, v18.4s, v19.4s }, [x13],
	WORD $0x4e30e494 // fcmeq	v20.4s, v4.4s, v16.4s
	WORD $0x4e31e4b5 // fcmeq	v21.4s, v5.4s, v17.4s
	WORD $0x4e32e4d6 // fcmeq	v22.4s, v6.4s, v18.4s
	WORD $0x4e33e4e4 // fcmeq	v4.4s, v7.4s, v19.4s
	WORD $0x6eb48400 // sub	v0.4s, v0.4s, v20.4s
	WORD $0x6eb58463 // sub	v3.4s, v3.4s, v21.4s
	WORD $0x6eb68442 // sub	v2.4s, v2.4s, v22.4s
	WORD $0x6ea48421 // sub	v1.4s, v1.4s, v4.4s
	WORD $0x54fffe69 // b.ls	.LBB0_3

LBB0_4:
	WORD $0x6b0a017f // cmp	w11, w10
	WORD $0x540001aa // b.ge	.LBB0_7
	WORD $0x2a0b03ec // mov	w12, w11
	WORD $0xd37e7d6d // ubfiz	x13, x11,
	WORD $0x93407d4a // sxtw	x10, w10
	WORD $0x8b0d002b // add	x11, x1, x13
	WORD $0x8b0d000d // add	x13, x0, x13

LBB0_6:
	WORD $0x3cc105a4 // ldr	q4, [x13],
	WORD $0x3cc10565 // ldr	q5, [x11],
	WORD $0x9100118c // add	x12, x12,
	WORD $0xeb0a019f // cmp	x12, x10
	WORD $0x4e25e484 // fcmeq	v4.4s, v4.4s, v5.4s
	WORD $0x6ea48400 // sub	v0.4s, v0.4s, v4.4s
	WORD $0x54ffff4b // b.lt	.LBB0_6

LBB0_7:
	WORD $0x4ea38400 // add	v0.4s, v0.4s, v3.4s
	WORD $0x7100051f // cmp	w8,
	WORD $0x4ea28400 // add	v0.4s, v0.4s, v2.4s
	WORD $0x4ea18400 // add	v0.4s, v0.4s, v1.4s
	WORD $0x4eb1b800 // addv	s0, v0.4s
	WORD $0x1e26000a // fmov	w10, s0
	WORD $0x4b0a012b // sub	w11, w9, w10
	WORD $0x540005eb // b.lt	.LBB0_13
	WORD $0x93407d29 // sxtw	x9, w9
	WORD $0xcb08012a // sub	x10, x9, x8
	WORD $0x9100054c // add	x12, x10,
	WORD $0xeb09019f // cmp	x12, x9
	WORD $0x4b0803ec // neg	w12, w8
	WORD $0x9a8ad52a // csinc	x10, x9, x10, le
	WORD $0x8b08014d // add	x13, x10, x8
	WORD $0x8b2cc12a // add	x10, x9, w12, sxtw
	WORD $0xcb0901ac // sub	x12, x13, x9
	WORD $0xf100219f // cmp	x12,
	WORD $0x54000363 // b.lo	.LBB0_12
	WORD $0x6f00e400 // movi	v0.2d,
	WORD $0xd37ef52e // lsl	x14, x9,
	WORD $0xcb28c9c8 // sub	x8, x14, w8, sxtw
	WORD $0x927df18d // and	x13, x12,
	WORD $0x6f00e401 // movi	v1.2d,
	WORD $0x9100410e // add	x14, x8,
	WORD $0x8b0d014a // add	x10, x10, x13
	WORD $0x8b0e0028 // add	x8, x1, x14
	WORD $0x4e041d60 // mov	v0.s[0], w11
	WORD $0x8b0e000b // add	x11, x0, x14
	WORD $0xaa0d03ee // mov	x14, x13

LBB0_10:
	WORD $0xad7f8d62 // ldp	q2, q3, [x11,
	WORD $0xf10021ce // subs	x14, x14,
	WORD $0x9100816b // add	x11, x11,
	WORD $0xad7f9504 // ldp	q4, q5, [x8,
	WORD $0x91008108 // add	x8, x8,
	WORD $0x4e24e442 // fcmeq	v2.4s, v2.4s, v4.4s
	WORD $0x4e25e463 // fcmeq	v3.4s, v3.4s, v5.4s
	WORD $0x4ea28400 // add	v0.4s, v0.4s, v2.4s
	WORD $0x4ea38421 // add	v1.4s, v1.4s, v3.4s
	WORD $0x54fffee1 // b.ne	.LBB0_10
	WORD $0x4ea08420 // add	v0.4s, v1.4s, v0.4s
	WORD $0xeb0d019f // cmp	x12, x13
	WORD $0x4eb1b800 // addv	s0, v0.4s
	WORD $0x1e26000b // fmov	w11, s0
	WORD $0x54000140 // b.eq	.LBB0_13

LBB0_12:
	WORD $0xd37ef548 // lsl	x8, x10,
	WORD $0x9100054a // add	x10, x10,
	WORD $0xbc686800 // ldr	s0, [x0, x8]
	WORD $0xbc686821 // ldr	s1, [x1, x8]
	WORD $0x1e212000 // fcmp	s0, s1
	WORD $0x1a9f17e8 // cset	w8, eq
	WORD $0xeb09015f // cmp	x10, x9
	WORD $0x4b08016b // sub	w11, w11, w8
	WORD $0x54ffff0b // b.lt	.LBB0_12

LBB0_13:
	WORD $0x1e220160 // scvtf	s0, w11
	WORD $0xbd000040 // str	s0, [x2]
	WORD $0xa8c17bfd // ldp	x29, x30, [sp],
	WORD $0xd65f03c0 // ret
